草庐IT

Java TCP Socket等待空闲?

全部标签

java - 线程状态阻塞和等待之间的区别

这个问题在这里已经有了答案:DifferencebetweenWAITandBLOCKEDthreadstates(6个答案)关闭4年前。我已通过以下帖子阅读了答案:DifferencebetweenWAITandBLOCKEDthreadstates但是,我还是很疑惑。我想知道在JVM级别上有什么区别,在CPU级别上有什么区别。这两个是否都有“线程上下文切换”?,在多线程环境中哪个更快?

等待锁定未(明显)锁定的对象的 Java 线程

通常当我请求线程转储时,系统性能不佳的症状很容易解释;也就是说,通常我会看到许多线程显然正在等待一个已被获取但未被另一个释放的监视器。在这种情况下,我有很多线程在等待监视器(0x965ad100),但似乎没有一个线程首先拥有该监视器。有问题的线程可以用这个签名来识别:waitingtolock(auk.gov.dti.og.fox.ConAgent)我试过用谷歌搜索这个,我似乎找到的都是讨论锁定监视器的帖子,没有关于等待未锁定监视器的帖子。完整的线程转储:http://www.basson.at/docs/stackoverflow/thread_dump.txt我希望这里有人可以解释

java - 等待锁释放的方法是怎样的?

我有一个类似于此的类:publicclassExpensiveCalculation{privateExecutorthreadExecutor=...privateObjectlock=newObject();privateObjectdata=null;publicObjectgetData(){synchronized(lock){returndata;}}pulicvoidcalculate(){executor.execute(()->internalCalculation());}privatevoidinternalCalculation(){synchronized(l

java - 在 Java 中,如何等待所有任务,但在出现第一个错误时停止?

我有一系列并发任务要运行。如果其中任何一个失败,我想打断它们并等待终止。但假设它们都没有失败,我想等待它们全部完成。ExecutorCompletionService似乎几乎是我在这里想要的,但似乎没有办法判断我的所有任务是否已完成,除非单独计算任务数量。(请注意,ExecutorCompletionService的Javadoc中的两个示例都跟踪任务的计数“n”,并使用它来确定服务是否完成。)我是不是忽略了什么,还是我真的必须自己编写这段代码? 最佳答案 是的,如果您使用的是ExecutorCompletionService,则确

Java:检查PC是否空闲

这是一个相当棘手的问题,因为我在网上找不到任何信息。基本上,我想知道如何在Java中检查计算机是否空闲。我希望程序仅在计算机处于Activity状态时运行,但如果处于空闲状态则不运行。我能想到的唯一方法是连接到鼠标/键盘并设置一个计时器。MSNMessenger具有“离开”功能,我希望有类似的功能。 最佳答案 Java无法在应用程序之外的系统级别与键盘或鼠标进行交互。ThatbeingsaidhereareseveralwaystodoitinWindows.最简单的可能是设置JNI和轮询GetLastInputInfo用于键盘和鼠

java - 如何中断 Future,但仍然等待它完成?

我有一系列使用ExecutorService排队的作业。如果用户点击“取消”,那么我需要通知那些工作他们应该尽快停止。但是,有时它们位于代码的关键部分,必须在父线程继续执行之前完成。我怎样才能做到这一点?我不想使用我自己的取消标志,因为那不会导致sleep/等待退出。我认为这段代码可以工作,但它不符合我的要求:while(true){//Dothisinaloop.Ifourthreadisinterrupted,wecallcancelonthethreads(totrytogetthemtohurryupbyskippingnon-essentialstuff),butwestil

java - 等待取消的 future 真正完成

我有一个SwingWorker,它调用一些不检查线程中断的代码。在调用worker.cancel(true)之后,worker.get()方法将立即抛出CancellationException(这是应该的).但是,由于后台任务的代码从不检查其线程是否被中断,因此它会愉快地继续执行。有没有标准的方法来等待后台任务真正完成?我希望显示“正在取消...”消息或类似的消息并阻止直到任务终止。(我敢肯定,如有必要,我总是可以在工作类中使用标志来完成此操作,只是寻找任何其他解决方案。) 最佳答案 我试了一下这个,这就是我想出的。我正在使用Co

java - 如何等待文本字段中的输入?

我正在将控制台应用程序转换为使用Swing的应用程序。目前我希望我的程序做与此类似的事情.nextInt();我如何通过使用.getText();或类似的东西来实现这一点?简而言之;如何在用户在文本字段中输入内容并按下回车键之前暂停程序的执行。 最佳答案 更新:所以你想等待用户从GUI输入一些东西。这是可能的,但需要同步,因为GUI在另一个线程中运行。所以步骤是:创建一个“持有者”对象,将结果从GUI委托(delegate)给“逻辑”线程“逻辑”线程等待输入(使用holder.wait())当用户输入文本时,它会同步“holder”

java - 等待线程在 shutdownhook 中写入更改

我有一个shutdownhook,它在进程终止时执行。然而,程序对h2数据库所做的更改不是持久的。只有在提交后让关闭线程等待一段时间,我才能在再次启动时看到数据库中的更改。Runtime.getRuntime().addShutdownHook(newThread(){@Overridepublicvoidrun(){//H2dbaddrow,commitandcloseThread.sleep(1000);//intry/catchSystem.out.println("Shutdowncomplete");}}只有sleep,我会在下次连接到数据库时看到更改。有谁知道如何在进程终止

java - BufferedReader.readLine() 等待来自控制台的输入

我正在尝试从控制台读取文本行。行数是事先不知道的。BufferedReader.readLine()方法读取一行,但在最后一行之后等待来自控制台的输入。应该怎么做才能避免这种情况?请看下面的代码片段:publicstaticString[]getLinesFromConsole(){StringstrLine="";try{//GettheobjectofDataInputStreamInputStreamReaderisr=newInputStreamReader(System.in);BufferedReaderbr=newBufferedReader(isr);Stringlin